@奈良山
2年前 提问
1个回答

代码静态分析有哪些技术

帅末
2年前

代码静态分析有以下技术:

  • 词法分析:从左至右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token)流,生成相关符号列表。

  • 语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树。

  • 抽象语法树分析:将程序组织成树形结构,树中的相关结点代表了程序中的相关代码。

  • 语义分析:对结构上正确的源程序进行上下文有关性质的审查。

  • 控制流分析:生成有向控制流图(控制流图CFG是编译器内部用有向图表示一个程序过程的一种抽象数据结构,图中的结点表示一个程序基本块,基本块是没有任何跳转的顺序语句代码,图中的边表示代码中的跳转,它是有向边,起点和终点都是基本块),用结点表示基本代码块,结点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。

  • 数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存相关数据信息。通过静态模拟应用程序的执行路径,帮助用户找到运行时才能暴露的一些严重错误,如资源泄漏、空指针异常、SQL注入及其他的安全性漏洞等潜在的运行时错误

  • 污点分析:“污点”是指所有来自不可靠数据源的数据,如用户输入、网络等。基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。

  • 程序切片:将一个程序中用户感兴趣的代码都抽取出来组成一个新的程序,这个新的程序就是源程序的切片,根据切片规则的不同,生成的切片也各不相同。